HT46 A/D Type MCU内容如何?
Answer
HT46 A/D Type MCU提供2K、4K及8K的OTP Type及Mask Type共4对MCU,编号为HT46R47/HT46C47、HT46R22/HT46C22、HT46R23/HT46C23、HT46R24/HT46C24总共8颗IC,其中除HT46R47/HT46C47外;均内含I2C序列传输接口,规格功能请参考Holtek Data Sheet。
HT46 A/D Type MCU功能有何不同?
Answer
Part No. |
VDD |
SystemClock |
Program |
Data |
I/O |
Timer |
Interrupt |
Stack |
I2C |
A/D |
PFD |
PWM |
Package | ||
8-bit |
16-bit |
Ext. |
Int. | ||||||||||||
2.2V~5.5V |
400kHz~8MHz |
2Kx14 |
64x8 |
13 |
1 |
-- |
1 |
2 |
6 |
-- |
9-bitx4ch |
v |
8-bitx1 |
18DIP/SOP | |
2.2V~5.5V |
400kHz~8MHz |
2Kx14 |
64x8 |
19 |
1 |
-- |
1 |
3 |
6 |
v |
9-bitx8ch |
v |
8-bitx1 |
24SKDIP/SOP | |
2.2V~5.5V |
400kHz~8MHz |
4Kx15 |
192x8 |
23 |
-- |
1 |
1 |
3 |
8 |
v |
10-bitx8ch |
v |
8-bitx2 |
24SKDIP/SOP, | |
HT46R24 |
2.2V~5.5V |
400kHz~8MHz |
8Kx16 |
384x8 |
40 |
-- |
2 |
1 |
4 |
16 |
v |
10-bitx8ch |
v |
8-bitx4 |
48SSOP |
注:细节规格请参考 Holtek Data Sheet。 |
HT46 A/D Type MCU封装脚位如何提供?
Answer
为了方便客户MCU升级使用,HT46R22/HT46C22之24SKDIP/SOP脚位与HT46R23/HT46C23之24SKDIP/SOP脚位功能相同。
间接寻址如何使用?
Answer
首先将要读写之Data Memory的地址先存入地址指针缓存器 (MP),然后对IAR执行读写 (例如: MOV a, IAR),即可读到MP所指到的Data (MP的内容当地址)。间接寻址功能特别方便于数列 (array) 的处理,一般先将数列地址放入MP做运算后再读取所需的数列Data。
为什么HT46X47与HT46X22之MP Bit7写入0,但读出却是1?
Answer
HT46X47 Data RAM从40H~7FH,HT46X22 Data RAM从40H~7FH,因为两者之Data RAM皆不超过80H,故其MP仅有7个Bits (Bit0~Bit6)有效,亦即MP之Bit7写入无效且读到始终为1。虽然MP写入70H读到F0H;实质上是指向70H,所以其间接寻址读写是完全正确的。
HT46 A/D Type MCU有何重要功能及特性?
Answer
操作电压范围 2.2V ~ 5.5V
工业温度规格 -40°C ~ +85°C
Low Voltage Reset功能
OTP / Mask Type MCU兼容
其它请参考 Holtek Data Sheet
HT46 A/D Type MCU是否提供Dice form?
Answer
Holtek 同时提供OTP Type及Mask Type MCU的Dice form的量产服务,但使用OTP MCU Dice量产时,客户要特别注意打线及烧录的操作问题。
HT46 A/D Type MCU的工作频率为何?
Answer
在5V、3.3V及3个电池的应用,工作频率达Max. 8MHz (3.3V)。
在3V及2个电池的应用,工作频率达Max. 4MHz (2.2V)。
HT46 A/D Type MCU的ESD及Latch-up能力如何?
Answer
HT46 A/D Type MCU为适合在工业产品使用;在ESD和Latch-up特别加强。在ESD方面;依据美国军方标准MIL-STD-883E 3015.7;采用人体放电模式测试;每一I/O脚皆超过正负5KV以上。
在Latch-up方面;依据JEDEC-NO.17标准,采用Current Mode方式测试,每一I/O脚皆超过正负100mA以上。
HT46R23/HT46C23有两组MP使用有何不同?
Answer
MP0/R0和MP1/R1必需配对使用,其中MP0/R0只能用在RAM BANK0,MP1/R1则可以在任何RAM BANK使用。
查表指令如何使用,有何注意事项?
Answer
查表指令有二种,一种是TABRDC指令,此指令读取目前指令所在表数据,另一种为TABRDL指令,此指令固定读取最后一页表数据。要查表时首先必需将表的Low Address填入TBLP再执行查表指令,表的Low Byte Data将存入指令指定的内存;表的High Byte Data被存入TBLH中,要注意未满16-Bit之表Data高位被补0。
没有Push和POP指令;中断时资料要如何备份?
Answer
虽然没有Push和POP指令,程序员仍可指定专用记忆RAM BYTE (例如:db ACCStack; for ACC Storage) 储存中断时会被破坏的资料。首先将ACC存入专用内存,然后利用ACC依序将Status和其它资料搬移至各别之专用内存。在中断返回前,再反序将其它备份资料,Status和ACC回存,最后再执行RETI返回主程序。
可以在Interrupt Service Routine内执行Call吗?
Answer
因为HT46 A/D Type MCU Stack数目有限,在Interrupt中执行Call要特别注意,如果在进入Interrupt时Stack已经满了,则会造成Stack Over,而使得程序无法返回。所以若要在Interrupt内执行Call,必需考虑在最差情况下之Stack使用数目,务必使在最差状况下进入Interrupt仍有Stack空间。
中断处理中可否允许相同的中断再进入?
Answer
理论上在进入中断时MCU会自动清除EMI旗标 (EMI=0),并禁止所有中断的再进入,若中断处理中用软件设定EMI旗标 (EMI=1),则在Stack有空之下,所有中断(含相同中断)皆可再进入。要允许相同的中断再进入,需特别注意备份资料的处理,应避免已备份之资料被再进入的中断所破坏。若不是非常紧急中断,一般不建议中断再中断。
没用的I/O Pin如何处理?
Answer
若不用之I/O Pin浮接时,会造成IC的耗电,最好的处理方式就是将不用的I/O Pin设定成Output Pin,如果要设成Input Pin则要选择Pull-high Option将Pin空接或不选Pull-high将此Pin接地。
已经进入HALT Mode为何还有耗电?
Answer
MCU进入HALT会将系统OSC关闭,但WDT OSC (如果Option选WDT Enable) 仍在工作,而且全部I/O会保持HALT前状态,除了WDT OSC会耗一些电外,最要注意的是Input Port是否浮接或者Output Port是否仍有负载,这些I/O处理要非常小心,否则会耗大电流。
PA已经Low为何没有唤醒MCU?
Answer
MCU的PA Port唤醒为瞬间下降缘触发,若在执行HALT之前PA已经Low,且在HALT期间一直维持在Low,因为没有下降缘动作,所以无法唤醒MCU。
为何外部中断有下降缘,仍然没有唤醒MCU?
Answer
虽然MCU可由中断唤醒,但严格的说是要靠中断要求旗标 (Request Flag) EIF由0变1才能唤醒。若在MCU进入HALT之前EIF已经设定 (EIF=1),则再来之INT无法改变EIF的值,亦即是EIF不能由0变1,所以不能唤醒MCU。
可以让外部中断不产生唤醒MCU吗?
Answer
在执行HALT之前先清除EMI再设定EIF=1,则外部中断就无法唤醒MCU。
WDT Clock Source选择WDT OSC和选择fSYS/4有何差别?
Answer
WDT Clock Source选择WDT OSC则在系统误入HALT时WDT Timer仍然继续工作,当WDT Time-out可以再激活系统。若选择 fSYS/4则在误入HALT后,则一直沉睡下去无法Wake-up,但选择WDT OSC则需花一些代价 (消耗电流)。在另外一种情形,如果系统正常就有HALT功能,且在HALT时不希望被WDT叫醒,则此时WDT Source可选 fSYS/4。
2个CLR WDT指令如何使用?
Answer
2个CLR WDT可以增加系统可靠性。若程序有2个主要的交替循环Loop;则可在1个Loop放CLR WDT1,在另1个Loop放CLR WDT2,一旦程序错误或受噪声干扰造成一直停留在某一个Loop时;WDT就会激活,发出WDT Time-out重新激活CPU。
8-Bit TMR值如何设定?
Answer
8-Bit Timer/Counter为一向上数之计数器 (Counter),每当Counter数到255 (0FFH) 溢位0H时产生中断 (Interrupt),所以若要计数为N (N < 256);则TMR值要设定成 256-N,设定好后激活TMR;TMR即从设定值往上数到255溢出到0 (即256),故所得值即256-(256-N)=N。
16-Bit TMR值如何设定?
Answer
16-Bit Timer/Counter为一向上数之计数器 (Counter),每当Counter数到65535 (0FFFFH)溢位0H时产生中断 (Interrupt),所以若要计数为N (N < 65536);则TMR值要设定成 65536-N,设定好后激活TMR;TMR即从设定值往上数到65535溢出到0 (即65536),故所得值即65536-(65536-N)=N。
16-Bit Timer/Counter的设定和读取顺序?
Answer
HT46系列MCU内部Data Bus均为8-Bit,对于16-Bit的资料必需两次才能完成,对16-Bit Timer/Counter的写必需先写Low Byte然后High Byte,而读的顺序必需先读High Byte然后Low Byte。
Prescaler + 8-Bit Timer之Prescaler可以Reset吗?
Answer
Prescaler在Power On Reset后,就一直不停的Run,没有任何指令可以Reset此Prescaler。
8-Bit Timer/Counter之Timer Mode如何设定?
Answer
因Timer/Counter有3种模式,即Timer、Event Counter和Pulse Width等3种。
要执行Timer Mode要执行以下动作设定:
当Timer被打开后,Timer开始向上计数,若Timer OFF (TMRC.4=0),则Timer立即停止。下次Timer再ON,则从上次停留值继续往上数,直到满位溢出00H时产生中断,同时Timer从TMR Register重新Load初始值。
16-Bit Timer/Counter之Timer Mode如何设定?
Answer
因Timer/Counter有3种模式,即Timer、Event Counter和Pulse Width等3种。
要执行Timer Mode要执行以下动作设定:
当Timer被打开后,Timer开始向上计数,若Timer OFF (TMRC.4=0),则Timer立即停止。下次Timer再ON,则从上次停留值继续往上数,直到满位溢出00H时产生中断,同时Timer从TMR Register重新Load初始值。
Timer/Counter之Event Counter Mode如何设定?
Answer
因Timer/Counter有3种模式,即Timer、Event Counter和Pulse Width等3种。
要执行Event Counter Mode要执行以下动作:
8-Bit Timer/Counter之Pulse Width Mode如何设定?
Answer
因Timer/Counter有3种模式,即Timer、Event Counter和Pulse Width等3种。
要执行Pulse Width Mode要执行以下动作:
执行完以上步骤,程序可抽空Check TON值,若TON=0表示Pulse Width量度完成,Timer的值 x 2n即是Pulse时间的宽度。
16-Bit Timer/Counter之Pulse Width Mode如何设定?
Answer
因Timer/Counter有3种模式,即Timer、Event Counter和Pulse Width等3种。
要执行Pulse Width Mode要执行以下动作:
执行完以上步骤,程序可抽空Check TON值,若TON=0表示Pulse Width量度完成,Timer的值即是Pulse时间的宽度。
8-Bit PFD如何设定?
Answer
HT46X47、HT46X22为8-Bit Timer,使用PFD设定如下:
执行以上设定后,若PA.3=1则PFD ON,若PA.3=0则PFD OFF
16-Bit PFD如何设定?
Answer
HT46X23为16-Bit Timer,使用PFD设定如下:
执行以上设定后,若PA.3=1则PFD ON,若PA.3=0则PFD OFF
HT46 A/D Type MCU PWM如何使用?
Answer
首先Mask Option需选择PWM功能,使用时,先设PDC.0=1再写入一个欲输出的值丢到PWM缓存器,当PD.0=0则PWM输出0;当PD.0=1输出PWM波形 (若有第2个PWM则控制PDC.1和PD.1)。
PWM (6+2) Mode和 (7+1) Mode之频率为何?
Answer
PWM (6+2) Mode是将PWM的值分成4次送出,即每64个时钟送出PWM/4,其PWM频率为 fSYS/26。PWM (7+1) Mode是将PWM的值分成2次送出,即每128个时钟送出PWM/2,其PWM频率为 fSYS/27。所以说 (6+2) Mode与8 Bit Mode相比其PWM频率提高为4倍,而 (7+1) Mode与8 Bit Mode相比其频率提高为2倍。
HT46 A/D Type MCU如何使用
Answer
使用A/D要执行以下动作:
HT46 A/D Type MCU I2C Bus的功能?
Answer
HT46 A/D Type MCU除HT46X47外均有I2C Bus接口,此I2C Bus可经由SCL和SDA两条线接收,由Master传来的Data或者应Master要求回传Data给Master,亦即此I2C Bus完全处在被动(Slave)角色,所以说此I2C仅有Salve功能,而无Master功能。
HT46 A/D Type MCU I2C Bus如何使用?
Answer
首先必需设好地址(HADR)并打开I2C Bus (HEN=1)和中断(EHI=1);从此I2C电路开始接收SDA传来的地址资料,若地址资料与HADR内容一致;I2C自动应答(ACK) Master;并设定HASS (HASS=1)旗标,进入中断。
此时MCU判断Master的要求是读或是写资料,若Master要读资料,则MCU将Data写入HDR并设定传送(HTX=1)旗标,若Master要写资料则I2C继续接收Data。总体来说;此I2C有自动接收地址、自动比对地址、自动应答(ACK)和将HDR之资料,依据Master的时钟信号(SCL)传送出去,所以MCU祇要简单的从HDR读和写数据即可,详细流程请参照Data Sheet。
TAD的时钟频率如何计算?
Answer
A/D转换需要76个TAD时钟,时钟的频率由ADCS1和ADCS0决定,其计算如下表:
ADCS1 |
ADCS0 |
TAD频率 |
0 |
0 |
fSYS/2 |
0 |
1 |
fSYS/8 |
1 |
0 |
fSYS/32 |
1 |
1 |
Undefined |
2颗电池 (2.2V~3.8V) 的工作电压操作可以使用LVR吗?
Answer
LVR的动作点在2.7V~3.3V之间,所以2.2V的工作电压不能选择LVR,若一定要侦测2.2V低压,可以外加Voltage Detector (HT70XX系列)。
Power On Reset时间为何?
Answer
在3V时,Power On Reset时间为45ms~180ms;5V时,Power On Reset的时间为35ms~140ms
MCU Power On时,VDD的上升时间有何限制?
Answer
MCU Power On时为了使Reset可以完全成功,建议Power On VDD上升时间在20ms以内。当电池逐渐没电,电池内阻增大,造成VDD上升缓慢会影响Reset成功。
在Data Sheet的Reset电路,是否可适用各种应用状况?
Answer
Data Sheet所提供的Reset电路一般可适用各种应用状况,若在特殊情形,要参考当时环境及Noise,再设计适当Reset电路。
低电压Reset (LVR) 在HALT时,是否会耗电?
Answer
LVR在HALT时没有作用,所以没有耗电问题。
ADCLK时钟频率设定是否有限制 , 如何计算?
Answer
HT46 A/D with LCD Type MCU 的 A/D Clock Period (TAD) 最快为1us , 因此由ADCS1和ADCS0设定时钟频率需确定TAD不可小于1us . 其计算可参考下表:
Fsys |
A/D Clock Period (TAD) | |||
ADCS1,ADCS0 = 00 (Fsys/2) |
ADCS1,ADCS0 = 01 (Fsys/8) |
ADCS1,ADCS0 = 10 (Fsys/32) |
ADCS1,ADCS0 =11 | |
1 MHz | 2 us | 8 us | 32 us | Undefine |
2 MHz | 1 us | 4 us | 16 us | |
4 MHz | *500 ns | 2 us | 8 us | |
8 MHz | *250 ns | 1 us | 4 us |
A/D取样时间为何?
Answer
系统频率Fsys=4MHz , ADCLK = fsys/32 , A/D input signal 是一个square wave(250us), A/D要对square wave之 level 进行转换,但是有时就转换不正确 .
Answer
HT46 A/D with LCD Type MCU 的转换时间(A/D conversion time)为76 TAD . 于此转换进行期间会先进行 S&H 动作, 其时间为32 TAD . 参考下图 : A/D Conversion Timing .
若 Fsys = 4MHz, ADCLK = fsys/32, A/D Sampling Time需32TAD = 256us
因 ADCLK之除级为free run counter, 所以A/D Sampling Time tolerance应为31~32 ADCLK; 248us此问题可修改 ADCLK 为fsys/8 , 缩短A/D Sampling Time 为64us .
HT46R47 工作在3.3V时, LVR option 选择 enable 与 disable 时功耗差多少?
Answer
在一般操作电流约为 mA级 , LVR option 选择 enable 与 disable 时, 功耗差仅约为30μA. 且在 HALT 状态下, LVR 会自动关闭的,所以在使用HT46R47时, 不需担心 LVR 功耗问题.